package com.vhans.db.service.impl;

import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vhans.core.domain.Base;
import com.vhans.core.utils.BeanCopyUtils;
import com.vhans.db.mapper.BasesMapper;
import com.vhans.db.model.dto.ConditionDTO;
import com.vhans.db.model.dto.base.BaseDTO;
import com.vhans.db.model.vo.base.BaseInfoVO;
import com.vhans.db.model.vo.base.BaseVO;
import com.vhans.db.service.IBaseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 基本属性Service业务层处理
 * 
 * @author vhans
 * @date 2023-05-20
 */
@Service
public class BaseServiceImpl extends ServiceImpl<BasesMapper, Base> implements IBaseService {
    @Autowired
    private BasesMapper baseMapper;

    /**
     * 查询基本属性列表
     * 
     * @param condition 条件
     * @return 基本属性
     */
    @Override
    public List<BaseVO> selectBaseVOList(ConditionDTO condition) {
        // 查询基本属性信息
        return baseMapper.selectBaseVOList(condition);
    }

    /**
     * 新增基本属性
     * 
     * @param base 基本属性
     * @return 插入id
     */
    @Override
    public int insertBase(BaseDTO base) {
        // 要添加的基本属性
        Base newBase = BeanCopyUtils.copyBean(base, Base.class);
        baseMapper.insert(newBase);
        return newBase.getId();
    }

    /**
     * 获取基本属性编辑信息
     *
     * @param id 基本属性主键
     * @return 基本属性
     */
    @Override
    public BaseInfoVO selectBaseInfoById(Integer id) {
        // 查询基本属性信息
        BaseInfoVO baseInfoVO = baseMapper.selectBaseInfoById(id);
        Assert.notNull(baseInfoVO, "没有该基本属性");
        return baseInfoVO;
    }

    /**
     * 修改基本属性
     * 
     * @param base 基本属性
     */
    @Override
    public void updateBase(BaseDTO base) {
        // 要修改的基本属性
        Base newBase = BeanCopyUtils.copyBean(base, Base.class);
        baseMapper.updateById(newBase);
    }

    /**
     * 批量删除基本属性
     *
     * @param idList 需要删除的基本属性主键列表
     * @return 影响行
     */
    @Override
    public int deleteBaseByIdIdList(List<Integer> idList) {
        // 删除基本属性
        return baseMapper.deleteBatchIds(idList);
    }
}
